home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Applications / Portable Patmos / usr / include / machine / vmparam.h < prev   
Encoding:
C/C++ Source or Header  |  1994-11-08  |  11.2 KB  |  301 lines  |  [TEXT/R*ch]

  1. /*
  2.  * Copyright (c) 1988 University of Utah.
  3.  * Copyright (c) 1982, 1990 The Regents of the University of California.
  4.  * All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * the Systems Programming Group of the University of Utah Computer
  8.  * Science Department.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  */
  38. /*-
  39.  * Copyright (C) 1993    Allen K. Briggs, Chris P. Caputo,
  40.  *            Michael L. Finch, Bradley A. Grantham, and
  41.  *            Lawrence A. Kesteloot
  42.  * All rights reserved.
  43.  *
  44.  * Redistribution and use in source and binary forms, with or without
  45.  * modification, are permitted provided that the following conditions
  46.  * are met:
  47.  * 1. Redistributions of source code must retain the above copyright
  48.  *    notice, this list of conditions and the following disclaimer.
  49.  * 2. Redistributions in binary form must reproduce the above copyright
  50.  *    notice, this list of conditions and the following disclaimer in the
  51.  *    documentation and/or other materials provided with the distribution.
  52.  * 3. All advertising materials mentioning features or use of this software
  53.  *    must display the following acknowledgement:
  54.  *    This product includes software developed by the Alice Group.
  55.  * 4. The names of the Alice Group or any of its members may not be used
  56.  *    to endorse or promote products derived from this software without
  57.  *    specific prior written permission.
  58.  *
  59.  * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
  60.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  61.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  62.  * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
  63.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  64.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  65.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  66.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  67.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  68.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  69.  *
  70.  */
  71. /*
  72.  * from: Utah $Hdr: vmparam.h 1.16 91/01/18$
  73.  *
  74.  *    from: @(#)vmparam.h    7.3 (Berkeley) 5/7/91
  75.  *    $Id: vmparam.h,v 1.3 1993/12/04 03:49:13 briggs Exp $
  76.  */
  77.  
  78. /*
  79.  * Machine dependent constants for HP300
  80.    ALICE
  81.     BG -- Sat May 23 23:45:21 EDT 1992
  82.     You'd like to think that, wouldn't you?  Well it's NOT an hp300!  
  83.      It's a macII!  And therefore I am changing it.
  84.  */
  85.  
  86. /*
  87.  * USRTEXT is the start of the user text/data space, while USRSTACK
  88.  * is the top (end) of the user stack.  LOWPAGES and HIGHPAGES are
  89.  * the number of pages from the beginning of the P0 region to the
  90.  * beginning of the text and from the beginning of the P1 region to the
  91.  * beginning of the stack respectively.
  92.  *
  93.  */
  94. #define    USRTEXT        8192
  95. #define    USRSTACK    (-HIGHPAGES*NBPG)    /* Start of user stack */
  96.                         /* -1048576 */
  97. #define    BTOPUSRSTACK    (0x100000-HIGHPAGES)    /* btop(USRSTACK) */
  98. #define P1PAGES        0x100000
  99. #define    LOWPAGES    0
  100. #define HIGHPAGES    3         /* UPAGES. */
  101.  
  102. /*
  103.  * Virtual memory related constants, all in bytes
  104.  */
  105. #ifndef MAXTSIZ
  106. #define    MAXTSIZ        (6*1024*1024)        /* max text size */
  107. #endif
  108. #ifndef DFLDSIZ
  109. #define    DFLDSIZ        (8*1024*1024)        /* initial data size limit */
  110. #endif
  111. #ifndef MAXDSIZ
  112. #define    MAXDSIZ        (16*1024*1024)        /* max data size */
  113. #endif
  114. #ifndef    DFLSSIZ
  115. #define    DFLSSIZ        (512*1024)        /* initial stack size limit */
  116. #endif
  117. #ifndef    MAXSSIZ
  118. #define    MAXSSIZ        MAXDSIZ            /* max stack size */
  119. #endif
  120.  
  121. /*
  122.  * Default sizes of swap allocation chunks (see dmap.h).
  123.  * The actual values may be changed in vminit() based on MAXDSIZ.
  124.  * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024.
  125.  * DMMIN should be at least ctod(1) so that vtod() works.
  126.  * vminit() insures this.
  127.  */
  128. #define    DMMIN    32            /* smallest swap allocation */
  129. #define    DMMAX    4096            /* largest potential swap allocation */
  130.  
  131. /*
  132.  * Sizes of the system and user portions of the system page table.
  133.  */
  134. /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */
  135. /* ALICE 05/23/92 BG -- Why the hell isn't it, then?! */
  136. #define    SYSPTSIZE    (2 * NPTEPG)    /* 8mb */
  137. #define    USRPTSIZE     (2 * NPTEPG)    /* 8mb */
  138.  
  139. /*
  140.  * PTEs for mapping user space into the kernel for phyio operations.
  141.  * One page is enough to handle 4Mb of simultaneous raw IO operations.
  142.  */
  143. #ifndef USRIOSIZE
  144. #define USRIOSIZE    (1 * NPTEPG)    /* 4mb */
  145. #endif
  146.  
  147. /*
  148.  * PTEs for system V style shared memory.
  149.  * This is basically slop for kmempt which we actually allocate (malloc) from.
  150.  */
  151. #ifndef SHMMAXPGS
  152. #define SHMMAXPGS    1024        /* 4mb */
  153. #endif
  154.  
  155. /*
  156.  * External IO space map size.
  157.  * By default we make it large enough to map up to 3 DIO-II devices and
  158.  * the complete DIO space.  For a 320-only configuration (which has no
  159.  * DIO-II) you could define a considerably smaller region.
  160.  */
  161. /* 06/03/92,19:03:56 BG This needs to map IO area and NuBus areas. */
  162. #if BARFHEAD
  163. #ifndef EIOMAPSIZE
  164. #define EIOMAPSIZE    3584        /* 14mb */
  165. #endif
  166. #endif
  167.  
  168. /*
  169.  * Boundary at which to place first MAPMEM segment if not explicitly
  170.  * specified.  Should be a power of two.  This allows some slop for
  171.  * the data segment to grow underneath the first mapped segment.
  172.  */
  173. #define MMSEG        0x200000
  174.  
  175. /*
  176.  * The size of the clock loop.
  177.  */
  178. #define    LOOPPAGES    (maxfree - firstfree)
  179.  
  180. /*
  181.  * The time for a process to be blocked before being very swappable.
  182.  * This is a number of seconds which the system takes as being a non-trivial
  183.  * amount of real time.  You probably shouldn't change this;
  184.  * it is used in subtle ways (fractions and multiples of it are, that is, like
  185.  * half of a ``long time'', almost a long time, etc.)
  186.  * It is related to human patience and other factors which don't really
  187.  * change over time.
  188.  */
  189. #define    MAXSLP         20
  190.  
  191. /*
  192.  * A swapped in process is given a small amount of core without being bothered
  193.  * by the page replacement algorithm.  Basically this says that if you are
  194.  * swapped in you deserve some resources.  We protect the last SAFERSS
  195.  * pages against paging and will just swap you out rather than paging you.
  196.  * Note that each process has at least UPAGES+CLSIZE pages which are not
  197.  * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this
  198.  * number just means a swapped in process is given around 25k bytes.
  199.  * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81),
  200.  * so we loan each swapped in process memory worth 100$, or just admit
  201.  * that we don't consider it worthwhile and swap it out to disk which costs
  202.  * $30/mb or about $0.75.
  203.  */
  204. /* ALICE 05/23/92 BG -- This is soooo obsolete. */
  205. #define    SAFERSS        4        /* nominal ``small'' resident set size
  206.                        protected against replacement */
  207.  
  208. /*
  209.  * DISKRPM is used to estimate the number of paging i/o operations
  210.  * which one can expect from a single disk controller.
  211.  */
  212. /* ALICE 05/23/92 BG -- I changed this from 60 to 3600. */
  213. #define    DISKRPM        3600
  214.  
  215. /*
  216.  * Klustering constants.  Klustering is the gathering
  217.  * of pages together for pagein/pageout, while clustering
  218.  * is the treatment of hardware page size as though it were
  219.  * larger than it really is.
  220.  *
  221.  * KLMAX gives maximum cluster size in CLSIZE page (cluster-page)
  222.  * units.  Note that ctod(KLMAX*CLSIZE) must be <= DMMIN in dmap.h.
  223.  * ctob(KLMAX) should also be less than MAXPHYS (in vm_swp.c)
  224.  * unless you like "big push" panics.
  225.  */
  226.  
  227. #define    KLMAX    (4/CLSIZE)
  228. #define    KLSEQL    (2/CLSIZE)        /* in klust if vadvise(VA_SEQL) */
  229. #define    KLIN    (4/CLSIZE)        /* default data/stack in klust */
  230. #define    KLTXT    (4/CLSIZE)        /* default text in klust */
  231. #define    KLOUT    (4/CLSIZE)
  232.  
  233. /*
  234.  * KLSDIST is the advance or retard of the fifo reclaim for sequential
  235.  * processes data space.
  236.  */
  237. #define    KLSDIST    3        /* klusters advance/retard for seq. fifo */
  238.  
  239. /*
  240.  * Paging thresholds (see vm_sched.c).
  241.  * Strategy of 1/19/85:
  242.  *    lotsfree is 512k bytes, but at most 1/4 of memory
  243.  *    desfree is 200k bytes, but at most 1/8 of memory
  244.  *    minfree is 64k bytes, but at most 1/2 of desfree
  245.  */
  246. /* ALICE 05/23/92 BG -- I think we had better look these over carefully. */
  247. #define    LOTSFREE    (1024 * 1024)
  248. #define    LOTSFREEFRACT    4
  249. #define    DESFREE        (512 * 1024)
  250. #define    DESFREEFRACT    8
  251. #define    MINFREE        (128 * 1024)
  252. #define    MINFREEFRACT    2
  253.  
  254. /*
  255.  * There are two clock hands, initially separated by HANDSPREAD bytes
  256.  * (but at most all of user memory).  The amount of time to reclaim
  257.  * a page once the pageout process examines it increases with this
  258.  * distance and decreases as the scan rate rises.
  259.  */
  260. #define    HANDSPREAD    (2 * 1024 * 1024)
  261.  
  262. /*
  263.  * The number of times per second to recompute the desired paging rate
  264.  * and poke the pagedaemon.
  265.  */
  266. #define    RATETOSCHEDPAGING    4
  267.  
  268. /*
  269.  * Believed threshold (in megabytes) for which interleaved
  270.  * swapping area is desirable.
  271.  */
  272. /* ALICE 05/23/92 BG -- This should be higher.  How high, I don't know. */
  273. #define    LOTSOFMEM    2
  274.  
  275. #define    mapin(pte, v, pfnum, prot) \
  276.     (*(u_int *)(pte) = ((pfnum) << PGSHIFT) | (prot), TBIS((caddr_t)(v)))
  277.  
  278. /*
  279.  * Mach derived constants
  280.  */
  281.  
  282. /* user/kernel map constants */
  283. #define VM_MIN_ADDRESS        ((vm_offset_t)0)
  284. #define VM_MAXUSER_ADDRESS    ((vm_offset_t)0xFFFFD000)
  285.     /* Note that this goes as high as USRSTACK.  If USRSTACK goes higher, */
  286.     /*  this constant really should, too. */
  287. #define VM_MAX_ADDRESS        ((vm_offset_t)0xFFFFD000)
  288. #define VM_MIN_KERNEL_ADDRESS    ((vm_offset_t)0)
  289. #define VM_MAX_KERNEL_ADDRESS    ((vm_offset_t)0xFFFFF000)
  290.  
  291. /* virtual sizes (bytes) for various kernel submaps */
  292. #define VM_MBUF_SIZE        (NMBCLUSTERS*MCLBYTES)
  293. #define VM_KMEM_SIZE        (NKMEMCLUSTERS*CLBYTES)
  294. #define VM_PHYS_SIZE        (USRIOSIZE*CLBYTES)
  295.  
  296. /* # of kernel PT pages (initial only, can grow dynamically) */
  297. #define VM_KERNEL_PT_PAGES    ((vm_size_t)2)        /* XXX: SYSPTSIZE */
  298.  
  299. /* pcb base */
  300. #define    pcbb(p)        ((u_int)(p)->p_addr)
  301.